<?php

namespace app\admin\model\scanwork;

use think\Model;

/**
 * 供应商模型
 */
class Supplier extends Model
{
    // 表名
    protected $name = 'scanwork_supplier';
    
    // 自动写入时间戳字段
    protected $autoWriteTimestamp = 'int';

    // 定义时间戳字段名
    protected $createTime = 'createtime';
    protected $updateTime = 'updatetime';
    protected $deleteTime = false;

    // 追加属性
    protected $append = [
        'status_text',
        'level_text'
    ];
    
    /**
     * 状态列表
     */
    public function getStatusList()
    {
        return ['0' => __('禁用'), '1' => __('启用')];
    }

    /**
     * 状态文本
     */
    public function getStatusTextAttr($value, $data)
    {
        $value = $value ? $value : (isset($data['status']) ? $data['status'] : '');
        $list = $this->getStatusList();
        return isset($list[$value]) ? $list[$value] : '';
    }

    /**
     * 供应商等级列表
     */
    public function getLevelList()
    {
        return [
            'A' => __('A级（优质）'),
            'B' => __('B级（良好）'),
            'C' => __('C级（一般）')
        ];
    }

    /**
     * 等级文本
     */
    public function getLevelTextAttr($value, $data)
    {
        $value = $value ? $value : (isset($data['level']) ? $data['level'] : 'B');
        $list = $this->getLevelList();
        return isset($list[$value]) ? $list[$value] : '';
    }

    /**
     * 供应商类别列表
     */
    public function getCategoryList()
    {
        return [
            '面料商' => __('面料商'),
            '辅料商' => __('辅料商'),
            '五金商' => __('五金商'),
            '包装商' => __('包装商'),
            '其他' => __('其他')
        ];
    }

    /**
     * 关联物料供应商报价
     */
    public function materialSuppliers()
    {
        return $this->hasMany('MaterialSupplier', 'supplier_id', 'id');
    }

    /**
     * 关联采购记录
     */
    public function purchaseRecords()
    {
        return $this->hasMany('PurchaseRecord', 'supplier_id', 'id');
    }

    /**
     * 获取供应的物料数量
     */
    public function getMaterialCountAttr($value, $data)
    {
        return $this->materialSuppliers()->count();
    }

    /**
     * 获取采购总额
     */
    public function getTotalPurchaseAmountAttr($value, $data)
    {
        return $this->purchaseRecords()->sum('total_amount');
    }
}

